// ==++==
// 
//   
//    Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
//   
//    The use and distribution terms for this software are contained in the file
//    named license.txt, which can be found in the root of this distribution.
//    By using this software in any fashion, you are agreeing to be bound by the
//    terms of this license.
//   
//    You must not remove this notice, or any other, from this software.
//   
// 
// ==--==
/*============================================================
 **
 ** Class: BinaryEnums
 **
 **
 ** Purpose: Soap XML Formatter Enums
 **
 **
 ===========================================================*/

namespace System.Runtime.Serialization.Formatters.Binary
{
	using System.Runtime.Serialization.Formatters;
	using System.Runtime.Remoting;
	using System.Runtime.Serialization;
	using System;
    // BinaryHeaderEnum is the first byte on binary records
    // (except for primitive types which do not have a header)
    [Serializable]
	enum BinaryHeaderEnum
    {
    	SerializedStreamHeader = 0,
    	Object = 1,
		ObjectWithMap = 2,
		ObjectWithMapAssemId = 3,
		ObjectWithMapTyped = 4,
		ObjectWithMapTypedAssemId = 5,
		ObjectString = 6,
		Array = 7,
		MemberPrimitiveTyped = 8,
		MemberReference = 9,
		ObjectNull = 10,
		MessageEnd = 11,
		Assembly = 12,
        ObjectNullMultiple256 = 13,
        ObjectNullMultiple = 14,
        ArraySinglePrimitive = 15,
        ArraySingleObject = 16,
        ArraySingleString = 17,
        CrossAppDomainMap = 18,
        CrossAppDomainString = 19,
        CrossAppDomainAssembly = 20,
        MethodCall = 21,
        MethodReturn = 22,
	}

	// BinaryTypeEnum is used specify the type on the wire.
	// Additional information is transmitted with Primitive and Object types
    [Serializable]
	enum BinaryTypeEnum
	{
		Primitive = 0,
		String = 1,
		Object = 2,	
		ObjectUrt = 3,
		ObjectUser = 4,
        ObjectArray = 5,
        StringArray = 6,
        PrimitiveArray = 7,
	}

    [Serializable]
	internal enum BinaryArrayTypeEnum
	{
		Single = 0,
		Jagged = 1,
		Rectangular = 2,
		SingleOffset = 3,
		JaggedOffset = 4,
		RectangularOffset = 5,		
	}

    // Enums are for internal use by the XML and Binary Serializers
    // They will eventually signed to restrict there use

	// Formatter Enums
    [Serializable]
	internal enum InternalSerializerTypeE
	{
		Soap = 1,
		Binary = 2,
	}

	// Writer Enums
    [Serializable]
	internal enum InternalElementTypeE
	{
		ObjectBegin = 0,
		ObjectEnd = 1,
		Member = 2,
	}

	// ParseRecord Enums
    [Serializable]
	internal enum InternalParseTypeE
	{
		Empty = 0,
		SerializedStreamHeader = 1,
		Object = 2,
		Member = 3,
		ObjectEnd = 4,
		MemberEnd = 5,
		Headers = 6,
		HeadersEnd = 7,
		SerializedStreamHeaderEnd = 8,
		Envelope = 9,
		EnvelopeEnd = 10,
		Body = 11,
		BodyEnd = 12,
	}


    [Serializable]
	internal enum InternalObjectTypeE
	{
		Empty = 0,
		Object = 1,
		Array = 2,
	}


    [Serializable]
	internal enum InternalObjectPositionE
	{
		Empty = 0,
		Top = 1,
		Child = 2,
		Headers = 3,
	}

    [Serializable]
	internal enum InternalArrayTypeE
	{
		Empty = 0,
		Single = 1,
		Jagged = 2,
		Rectangular = 3,
		Base64 = 4,
	}

    [Serializable]
	internal enum InternalMemberTypeE
	{
		Empty = 0,
		Header = 1,
		Field = 2,
		Item = 3,
	}

    [Serializable]
	internal enum InternalMemberValueE
	{
		Empty = 0,
		InlineValue = 1,
		Nested = 2,
		Reference = 3,
		Null = 4,
	}

	// XML Parse Enum
    [Serializable]
	internal enum InternalParseStateE
	{
		Initial = 0,
		Object = 1,
		Member = 2,
		MemberChild = 3,
	}

	// Data Type Enums
    [Serializable]
	internal enum InternalPrimitiveTypeE
	{
		Invalid = 0,
		Boolean = 1,
		Byte = 2,
		Char = 3,
		Currency = 4,
		Decimal = 5,
		Double = 6,
		Int16 = 7,
		Int32 = 8,
		Int64 = 9,
		SByte = 10,
		Single = 11,
		TimeSpan = 12,
		DateTime = 13,
		UInt16 = 14,
		UInt32 = 15,
		UInt64 = 16,

        // Used in only for MethodCall or MethodReturn header
        Null = 17,
        String = 18,
	}

    [Serializable, Flags]
    internal enum MessageEnum
    {
        NoArgs = 0x1,
        ArgsInline = 0x2,
        ArgsIsArray = 0x4,
        ArgsInArray = 0x8,
        NoContext = 0x10,
        ContextInline = 0x20,
        ContextInArray = 0x40,
        MethodSignatureInArray = 0x80,
        PropertyInArray = 0x100,
        NoReturnValue = 0x200,
        ReturnValueVoid = 0x400,
        ReturnValueInline = 0x800,
        ReturnValueInArray = 0x1000,
        ExceptionInArray = 0x2000,
        GenericMethod = 0x8000
    }


	// ValueType Fixup Enum
    [Serializable]
	enum ValueFixupEnum
	{
		Empty = 0,
		Array = 1,
		Header = 2,
		Member = 3,
	}

	// name space
    [Serializable]
	internal enum InternalNameSpaceE
	{
		None = 0,
		Soap = 1,
		XdrPrimitive = 2,
		XdrString = 3,
		UrtSystem = 4,
		UrtUser = 5,
		UserNameSpace = 6,
		MemberName = 7,
		Interop = 8,
		CallElement = 9
	}

    [Serializable]
	internal enum SoapAttributeType
	{
		None = 0x0,
		SchemaType = 0x1,
		Embedded = 0x2,
		XmlElement = 0x4,
		XmlAttribute = 0x8
	}

}
